InfluxDb中的数据查询语法Group子句 您所在的位置:网站首页 influxdb group by InfluxDb中的数据查询语法Group子句

InfluxDb中的数据查询语法Group子句

#InfluxDb中的数据查询语法Group子句| 来源: 网络整理| 查看: 265

InfluxDb中的数据查询语法Group子句

GROUP BY子句后面可以跟用户指定的tags或者是一个时间间隔。

GROUP BY tags

GROUP BY 后面跟用户指定的tags,可以按照tag进行分组。

语法 SELECT_clause FROM_clause [WHERE_clause] GROUP BY [* | [, use NOAA_water_database > SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location" name: h2o_feet tags: location=coyote_creek time mean ---- ---- 1970-01-01T00:00:00Z 5.359342451341401 name: h2o_feet tags: location=santa_monica time mean ---- ---- 1970-01-01T00:00:00Z 3.530863470081006 运行例子

上面的查询中用到了InfluxQL中的函数来计算measurement h2o_feet的每location的water_level的平均值。InfluxDB返回了两个series:分别是location的两个值。

MEAN是一个函数,表示按照location进行分类求平均值,上面分了2个类,一个location=coyote_creek,一个location=santa_monica,可以看出coyote_creek这个地方的降雨量大一些。

说明:在InfluxDB中,epoch 0(1970-01-01T00:00:00Z)通常用作等效的空时间戳。如果要求查询不返回时间戳,例如无限时间范围的聚合函数,InfluxDB将返回epoch 0作为时间戳。

例二:对多个tag作group by > SELECT MEAN("index") FROM "h2o_quality" GROUP BY location,randtag name: h2o_quality tags: location=coyote_creek, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 50.69033760186263 name: h2o_quality tags: location=coyote_creek, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 49.661867544220485 name: h2o_quality tags: location=coyote_creek, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.360939907550076 name: h2o_quality tags: location=santa_monica, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 49.132712456344585 name: h2o_quality tags: location=santa_monica, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 50.2937984496124 name: h2o_quality tags: location=santa_monica, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.99919903884662 运行例子

上面的查询中用到了InfluxQL中的函数来计算measurement h2o_quality的每个location和randtag的Index的平均值。在GROUP BY子句中用逗号来分割多个tag。

例三:对所有tag作group by > SELECT MEAN("index") FROM "h2o_quality" GROUP BY * name: h2o_quality tags: location=coyote_creek, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 50.55405446521169 name: h2o_quality tags: location=coyote_creek, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 50.49958856271162 name: h2o_quality tags: location=coyote_creek, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.5164137518956 name: h2o_quality tags: location=santa_monica, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 50.43829082296367 name: h2o_quality tags: location=santa_monica, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 52.0688508894012 name: h2o_quality tags: location=santa_monica, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.29386362086556 运行例子

上面的查询中用到了InfluxQL中的函数来计算measurement h2o_quality的每个tag的Index的平均值。

请注意,查询结果与例二中的查询结果相同,其中我们明确指定了tag key location和randtag。 这是因为measurement h2o_quality中只有这两个tag key。

GROUP BY时间间隔

GROUP BY time()返回结果按指定的时间间隔group by。

基本的GROUP BY time()语法 语法 SELECT () FROM_clause WHERE GROUP BY time(),[tag_key] [fill()] 运行例子 基本语法描述

基本GROUP BY time()查询需要SELECT子句中的InfluxQL函数和WHERE子句中的时间范围。请注意,GROUP BY子句必须在WHERE子句之后。

time(time_interval)GROUP BY time()语句中的time_interval是一个时间duration。决定了InfluxDB按什么时间间隔group by。例如:time_interval为5m则在WHERE子句中指定的时间范围内将查询结果分到五分钟时间组里。

fill()fill()是可选的。它会更改不含数据的时间间隔的返回值。

覆盖范围:基本GROUP BY time()查询依赖于time_interval和InfluxDB的预设时间边界来确定每个时间间隔中包含的原始数据以及查询返回的时间戳。

基本语法示例

下面的例子用到的示例数据如下:

> SELECT "water_level","location" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time SELECT "water_level" FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time < '2015-08-18T00:18:00Z' GROUP BY time(12m) name: h2o_feet time count ---- ----- 2015-08-18T00:00:00Z 1 = 2015-08-18T00:00:00Z AND time < 2015-08-18T00:12:00Z time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:12:00Z 8.005 2015-08-18T00:00:00Z 2 time >= 2015-08-12T00:12:00Z AND time < 2015-08-18T00:24:00Z time >= 2015-08-12T00:12:00Z AND time < 2015-08-18T00:18:00Z 7.887 2015-08-18T00:12:00Z

第一个预设的12分钟时间边界从00:00开始,在00:12之前结束。只有一个数据点(8.005)落在查询的第一个GROUP BY time()间隔内,并且在第一个时间边界。请注意,虽然返回的时间戳在查询的时间范围开始之前发生,但查询结果排除了查询时间范围之前发生的数据。

第二个预设的12分钟时间边界从00:12开始,在00:24之前结束。 只有一个原点(7.887)都在查询的第二个GROUP BY time()间隔内,在该第二个时间边界内。

高级GROUP BY time()语法允许用户移动InfluxDB预设时间边界的开始时间。高级语法部分中的例三将继续显示此处的查询; 它将预设时间边界向前移动六分钟,以便InfluxDB返回:

name: h2o_feet time count ---- ----- 2015-08-18T00:06:00Z 2 运行例子 高级GROUP BY time()语法 语法 SELECT () FROM_clause WHERE GROUP BY time(,),[tag_key] [fill()] 运行例子 高级语法描述

高级GROUP BY time()查询需要SELECT子句中的InfluxQL函数和WHERE子句中的时间范围。 请注意,GROUP BY子句必须在WHERE子句之后。

time(time_interval,offset_interval)

offset_interval是一个持续时间。它向前或向后移动InfluxDB的预设时间界限。offset_interval可以为正或负。

fill()

fill()是可选的。它会更改不含数据的时间间隔的返回值。

范围

高级GROUP BY time()查询依赖于time_interval,offset_interval和InfluxDB的预设时间边界,以确定每个时间间隔中包含的原始数据以及查询返回的时间戳。

高级语法的例子

下面例子都使用这份示例数据:

> SELECT "water_level" FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time = 2015-08-18T00:00:00Z AND time < 2015-08-18T00:18:00Z time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:18:00Z 8.005,7.887 2015-08-18T00:00:00Z 2 time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:36:00Z 同坐 7.762,7.635,7.5 2015-08-18T00:18:00Z 3 time >= 2015-08-18T00:36:00Z AND time < 2015-08-18T00:54:00Z 同左 7.372,7.234,7.11 2015-08-18T00:36:00Z 4 time >= 2015-08-18T00:54:00Z AND time < 2015-08-18T01:12:00Z time = 2015-08-18T00:54:00Z 6.982 2015-08-18T00:54:00Z

第一个预设的18分钟时间边界从00:00开始,在00:18之前结束。 两个点(8.005和7.887)都落在第一个GROUP BY time()间隔内,并且在第一个时间边界。请注意,虽然返回的时间戳在查询的时间范围开始之前发生,但查询结果排除了查询时间范围之前发生的数据。

第二个预设的18分钟时间边界从00:18开始,在00:36之前结束。 三个点(7.762和7.635和7.5)都落在第二个GROUP BY time()间隔内,在第二个时间边界。 在这种情况下,边界时间范围和间隔时间范围是相同的。

第四个预设的18分钟时间边界从00:54开始,在1:12:00之前结束。 一个点(6.982)落在第四个GROUP BY time()间隔内,在第四个时间边界。

具有offset_interval的查询的时间边界和返回的时间戳符合偏移时间边界:

时间间隔序号 预设的时间边界 GROUP BY time()间隔 包含的数据点 返回的时间戳 1 time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:24:00Z 同左 8.005,7.887,7.762 2015-08-18T00:06:00Z 2 time >= 2015-08-18T00:24:00Z AND time < 2015-08-18T00:42:00Z 同坐 7.635,7.5,7.372 2015-08-18T00:24:00Z 3 time >= 2015-08-18T00:42:00Z AND time < 2015-08-18T01:00:00Z 同左 7.234,7.11,6.982 2015-08-18T00:42:00Z 4 time >= 2015-08-18T01:00:00Z AND time < 2015-08-18T01:18:00Z 无 无 无

六分钟偏移间隔向前移动预设边界的时间范围,使得边界时间范围和相关GROUP BY time()间隔时间范围始终相同。使用偏移量,每个间隔对三个点执行计算,返回的时间戳与边界时间范围的开始和GROUP BY time()间隔时间范围的开始匹配。

请注意,offset_interval强制第四个时间边界超出查询的时间范围,因此查询不会返回该最后一个间隔的结果。

例二:查询结果按12分钟间隔group by,并将预设时间界限向后移动 > SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time = 2015-08-18T00:00:00Z AND time < 2015-08-18T00:18:00Z time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:18:00Z 8.005,7.887 2015-08-18T00:00:00Z 2 time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:36:00Z 同坐 7.762,7.635,7.5 2015-08-18T00:18:00Z 3 time >= 2015-08-18T00:36:00Z AND time < 2015-08-18T00:54:00Z 同左 7.372,7.234,7.11 2015-08-18T00:36:00Z 4 time >= 2015-08-18T00:54:00Z AND time < 2015-08-18T01:12:00Z time = 2015-08-18T00:54:00Z 6.982 2015-08-18T00:54:00Z

第一个预设的18分钟时间边界从00:00开始,在00:18之前结束。 两个点(8.005和7.887)都落在第一个GROUP BY time()间隔内,并且在第一个时间边界。请注意,虽然返回的时间戳在查询的时间范围开始之前发生,但查询结果排除了查询时间范围之前发生的数据。

第二个预设的18分钟时间边界从00:18开始,在00:36之前结束。 三个点(7.762和7.635和7.5)都落在第二个GROUP BY time()间隔内,在第二个时间边界。 在这种情况下,边界时间范围和间隔时间范围是相同的。

第四个预设的18分钟时间边界从00:54开始,在1:12:00之前结束。 一个点(6.982)落在第四个GROUP BY time()间隔内,在第四个时间边界。

具有offset_interval的查询的时间边界和返回的时间戳符合偏移时间边界:

时间间隔序号 预设的时间边界 GROUP BY time()间隔 包含的数据点 返回的时间戳 1 time >= 2015-08-17T23:48:00Z AND time < 2015-08-18T00:06:00Z 无 无 无 2 time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:24:00Z 同左 8.005,7.887,7.762 2015-08-18T00:06:00Z 3 time >= 2015-08-18T00:24:00Z AND time < 2015-08-18T00:42:00Z 同坐 7.635,7.5,7.372 2015-08-18T00:24:00Z 4 time >= 2015-08-18T00:42:00Z AND time < 2015-08-18T01:00:00Z 同左 7.234,7.11,6.982 2015-08-18T00:42:00Z

负十二分钟偏移间隔向后移动预设边界的时间范围,使得边界时间范围和相关GROUP BY time()间隔时间范围始终相同。使用偏移量,每个间隔对三个点执行计算,返回的时间戳与边界时间范围的开始和GROUP BY time()间隔时间范围的开始匹配。

请注意,offset_interval强制第一个时间边界超出查询的时间范围,因此查询不会返回该最后一个间隔的结果。

例三:查询结果按12分钟间隔group by,并将预设时间边界向前移动

这个例子是上面*基本语法的问题*的继续

> SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time < '2015-08-18T00:18:00Z' GROUP BY time(12m,6m) name: h2o_feet time count ---- ----- 2015-08-18T00:06:00Z 2 运行例子

该查询使用InfluxQL函数来计算平均water_level,将结果分组为12分钟的时间间隔,并将预设时间边界偏移六分钟。

没有offset_interval的查询的时间边界和返回的时间戳符合InfluxDB的预设时间边界。我们先来看看没有offset_interval的结果:

> SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time < '2015-08-18T00:18:00Z' GROUP BY time(12m) name: h2o_feet time count ---- ----- 2015-08-18T00:00:00Z 1 2015-08-18T00:12:00Z 1 运行例子

没有offset_interval的查询的时间边界和返回的时间戳符合InfluxDB的预设时间界限:

时间间隔序号 预设的时间边界 GROUP BY time()间隔 包含的数据点 返回的时间戳 1 time >= 2015-08-18T00:00:00Z AND time < 2015-08-18T00:12:00Z time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:12:00Z 8.005 2015-08-18T00:00:00Z 2 time >= 2015-08-12T00:12:00Z AND time < 2015-08-18T00:24:00Z time >= 2015-08-12T00:12:00Z AND time < 2015-08-18T00:18:00Z 7.887 2015-08-18T00:12:00Z

第一个预设的12分钟时间边界从00:00开始,在00:12之前结束。只有一个数据点(8.005)落在查询的第一个GROUP BY time()间隔内,并且在第一个时间边界。请注意,虽然返回的时间戳在查询的时间范围开始之前发生,但查询结果排除了查询时间范围之前发生的数据。

第二个预设的12分钟时间边界从00:12开始,在00:24之前结束。 只有一个原点(7.887)都在查询的第二个GROUP BY time()间隔内,在该第二个时间边界内。

具有offset_interval的查询的时间边界和返回的时间戳符合偏移时间边界:

时间间隔序号 预设的时间边界 GROUP BY time()间隔 包含的数据点 返回的时间戳 1 time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:18:00Z 同左 8.005,7.887 2015-08-18T00:06:00Z 2 time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:30:00Z 无 无 无

六分钟偏移间隔向前移动预设边界的时间范围,使得边界时间范围和相关GROUP BY time()间隔时间范围始终相同。使用偏移量,每个间隔对三个点执行计算,返回的时间戳与边界时间范围的开始和GROUP BY time()间隔时间范围的开始匹配。

请注意,offset_interval强制第二个时间边界超出查询的时间范围,因此查询不会返回该最后一个间隔的结果。

GROUP BY time()加fill()

fill()更改不含数据的时间间隔的返回值。

语法 SELECT () FROM_clause WHERE GROUP BY time(time_interval,[ SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time SELECT MEAN("tadpoles") FROM "pond" WHERE time >= '2016-11-11T21:00:00Z' AND time SELECT MEAN("tadpoles") FROM "pond" WHERE time >= '2016-11-11T21:00:00Z' AND time SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有